package com.zjw.socket.demo.starter.pool;

import com.zjw.socket.demo.starter.annotation.NonNull;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetSocket;

public interface NetSocketPool {

  /**
   * 返回一个连接池
   */
  static NetSocketPool pool() {
    return NetSocketPoolImpl.pool();
  }

  /**
   * 添加连接
   *
   * @param socket 客户端套接字
   */
  void addConnect(@NonNull NetSocket socket);

  /**
   * 移除连接并关闭
   *
   * @param socket 客户端套接字
   */
  void removeConnect(@NonNull NetSocket socket);


  /**
   * 给连接池的所有socket发布buffer
   *
   * @param buffer 消息
   */
  void publishBuffer(@NonNull Buffer buffer);

  /**
   * 关闭连接池并且释放所有socket
   */
  void close();

  /**
   * 返回连接数
   */
  int count();
}
